/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package com.camachosanchez.gui;

import com.camachosanchez.bean.Talleres;
import com.camachosanchez.controler.jdbc.TalleresJdbcControler;
import com.camachosanchez.controler.jpa.TalleresJpaController;
import com.camachosanchez.gui.table.ModeloTablaTalleres;
import com.camachosanchez.gui.table.RenderizadorTabla;
import com.camachosanchez.gui.table.TableSorter;
import com.camachosanchez.util.EstadosJDialog.EstadoJDialog;
import com.camachosanchez.util.GUIUtil;
import java.util.List;
import javax.swing.ImageIcon;
import javax.swing.JOptionPane;
import javax.swing.WindowConstants;
import javax.swing.event.InternalFrameEvent;
import net.coderazzi.filters.gui.TableFilterHeader;

/**
 *
 * @author Zully
 */
public class MaestroTalleres extends javax.swing.JInternalFrame {

//    private DefaultTableModel dm;
    private ModeloTablaTalleres modelo;
    private TableFilterHeader filterHeader;

    /**
     * Creates new form MaestroTalleres
     */
    public MaestroTalleres() {
        initComponents();
        modelo = new ModeloTablaTalleres();
        TableSorter tableSorter = new TableSorter(modelo, tablaTalleres.getTableHeader());
        tablaTalleres.setModel(tableSorter);
        filterHeader = new TableFilterHeader();
        filterHeader.setTable(tablaTalleres);
        RenderizadorTabla render = new RenderizadorTabla();
        tablaTalleres.setDefaultRenderer(String.class, render);
        this.llenarTalleres();
        this.setSize(600, 350);
        tablaTalleres.getTableHeader().setReorderingAllowed(false);
        setFrameIcon(new ImageIcon(getClass().getResource("/com/camachosanchez/recursos/table.png")));
        GUIUtil.fondoBarraHerramientas(jToolBar1);
        this.setDefaultCloseOperation(WindowConstants.DO_NOTHING_ON_CLOSE);
        this.addInternalFrameListener(new javax.swing.event.InternalFrameAdapter() {

            @Override
            public void internalFrameClosing(InternalFrameEvent e) {
                cerrar();
            }
        });
    }

    private void cerrar() {
        GUIUtil.maximizarTodasLasVentanas(this);
    }

    private void setColumnaOculta() {
        tablaTalleres.getColumnModel().getColumn(1).setMinWidth(0);
        tablaTalleres.getColumnModel().getColumn(1).setMaxWidth(0);
        tablaTalleres.getColumnModel().getColumn(1).setPreferredWidth(0);
    }

//    private void setAnchoColumnas() {
//        int anchoColumna = 0;
//        TableColumnModel modeloColumna = jTableTalleres.getColumnModel();
//        TableColumn columnaTabla;
//        for (int i = 0; i < jTableTalleres.getColumnCount(); i++) {
//            columnaTabla = modeloColumna.getColumn(i);
//            switch (i) {
//                case 0:
//                    anchoColumna = 25;
//                    columnaTabla.setMinWidth(anchoColumna);
//                    columnaTabla.setMaxWidth(anchoColumna);
//                    columnaTabla.setPreferredWidth(anchoColumna);
//                    break;
//                case 1:
//                    anchoColumna = 0;
//                    columnaTabla.setMinWidth(anchoColumna);
//                    columnaTabla.setMaxWidth(anchoColumna);
//                    columnaTabla.setPreferredWidth(anchoColumna);
//                    break;
//                case 2:
//                case 3:
//                    anchoColumna = 160;
////                    columnaTabla.setMinWidth(anchoColumna);
////                    columnaTabla.setMaxWidth(anchoColumna);
//                    columnaTabla.setPreferredWidth(anchoColumna);
//                    break;
////                case 3:
////                    anchoColumna = 250;
////                    break;
//                case 4:
//                    anchoColumna = 100;
////                    columnaTabla.setMinWidth(anchoColumna);
////                    columnaTabla.setMaxWidth(anchoColumna);
//                    columnaTabla.setPreferredWidth(anchoColumna);
//                    break;
////                case 5:
////                    anchoColumna = 225;
////                    columnaTabla.setMinWidth(anchoColumna);
////                    columnaTabla.setMaxWidth(anchoColumna);
////                    columnaTabla.setPreferredWidth(anchoColumna);
////                    break;
//            }
//        }
//    }
    public void llenarTalleres() {
        modelo.limpiar();
        TalleresJdbcControler daoJdbc = new TalleresJdbcControler();
        List<Talleres> talleres = daoJdbc.findAll();
        for (Talleres t : talleres) {
            modelo.agregarTaller(t);
        }
//        setAnchoColumnas();
//        try {
//            Connection cn = ConexionSQL.obtenerConexion();
//            Statement st = cn.createStatement();
//            ResultSet rs;
//            rs = st.executeQuery("SELECT id, nombre, direccion, nombre_encargado, apellido_encargado, telefono, correo, estado FROM talleres WHERE estado=1");
//            while (rs.next()) {
//                Talleres taller = new Talleres();
//                taller.setId(rs.getInt(1));
//                taller.setNombre(rs.getString(2));
//                taller.setDireccion(rs.getString(3));
//                taller.setNombreEncargado(rs.getString(4));
//                taller.setApellidoEncargado(rs.getString(5));
//                taller.setTelefono(rs.getString(6));
//                taller.setCorreo(rs.getString(7));
//                taller.setEstado(rs.getBoolean(8));
//                modelo.agregarTaller(taller);
//            }
//            rs.close();
//            st.close();
//            cn.close();
//        } catch (Exception e) {
//            e.printStackTrace();
//        }
        GUIUtil.SetAnchoColumnas(tablaTalleres);
        setColumnaOculta();
    }

    /**
     * This method is called from within the constructor to initialize the form.
     * WARNING: Do NOT modify this code. The content of this method is always
     * regenerated by the Form Editor.
     */
    @SuppressWarnings("unchecked")
    // <editor-fold defaultstate="collapsed" desc="Generated Code">//GEN-BEGIN:initComponents
    private void initComponents() {

        jPanel1 = new javax.swing.JPanel();
        jScrollPane1 = new javax.swing.JScrollPane();
        tablaTalleres = new javax.swing.JTable();
        jToolBar1 = new javax.swing.JToolBar();
        jPanel2 = new javax.swing.JPanel();
        btnNuevo = new javax.swing.JButton();
        btnModificar = new javax.swing.JButton();
        btEliminar = new javax.swing.JButton();

        setClosable(true);
        setDefaultCloseOperation(javax.swing.WindowConstants.HIDE_ON_CLOSE);
        setIconifiable(true);
        setMaximizable(true);
        setResizable(true);
        setTitle(".:: Talleres ::.");

        jPanel1.setLayout(new java.awt.BorderLayout());

        tablaTalleres.setBorder(javax.swing.BorderFactory.createLineBorder(new java.awt.Color(156, 161, 165)));
        tablaTalleres.setModel(new javax.swing.table.DefaultTableModel(
            new Object [][] {
                {null, null, null, null},
                {null, null, null, null},
                {null, null, null, null},
                {null, null, null, null}
            },
            new String [] {
                "Title 1", "Title 2", "Title 3", "Title 4"
            }
        ));
        tablaTalleres.setRowHeight(22);
        tablaTalleres.setSelectionMode(javax.swing.ListSelectionModel.SINGLE_SELECTION);
        tablaTalleres.addMouseListener(new java.awt.event.MouseAdapter() {
            public void mouseClicked(java.awt.event.MouseEvent evt) {
                tablaTalleresMouseClicked(evt);
            }
        });
        jScrollPane1.setViewportView(tablaTalleres);

        jPanel1.add(jScrollPane1, java.awt.BorderLayout.CENTER);

        getContentPane().add(jPanel1, java.awt.BorderLayout.CENTER);

        jToolBar1.setBorder(javax.swing.BorderFactory.createEtchedBorder());
        jToolBar1.setFloatable(false);
        jToolBar1.setRollover(true);

        jPanel2.setBackground(new java.awt.Color(255, 255, 255));
        jPanel2.setLayout(new java.awt.FlowLayout(java.awt.FlowLayout.LEFT, 4, 4));

        btnNuevo.setIcon(new javax.swing.ImageIcon(getClass().getResource("/com/camachosanchez/recursos/24_new.png"))); // NOI18N
        btnNuevo.setToolTipText("Nuevo");
        btnNuevo.setBorder(javax.swing.BorderFactory.createLineBorder(new java.awt.Color(0, 0, 0)));
        btnNuevo.setFocusable(false);
        btnNuevo.setHorizontalTextPosition(javax.swing.SwingConstants.RIGHT);
        btnNuevo.setMaximumSize(new java.awt.Dimension(22, 22));
        btnNuevo.setMinimumSize(new java.awt.Dimension(22, 22));
        btnNuevo.setPreferredSize(new java.awt.Dimension(22, 22));
        btnNuevo.setVerticalTextPosition(javax.swing.SwingConstants.BOTTOM);
        btnNuevo.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                btnNuevoActionPerformed(evt);
            }
        });
        jPanel2.add(btnNuevo);

        btnModificar.setIcon(new javax.swing.ImageIcon(getClass().getResource("/com/camachosanchez/recursos/24_edit.png"))); // NOI18N
        btnModificar.setToolTipText("Modificar");
        btnModificar.setBorder(javax.swing.BorderFactory.createLineBorder(new java.awt.Color(0, 0, 0)));
        btnModificar.setFocusable(false);
        btnModificar.setHorizontalTextPosition(javax.swing.SwingConstants.RIGHT);
        btnModificar.setMaximumSize(new java.awt.Dimension(22, 22));
        btnModificar.setMinimumSize(new java.awt.Dimension(22, 22));
        btnModificar.setPreferredSize(new java.awt.Dimension(22, 22));
        btnModificar.setVerticalTextPosition(javax.swing.SwingConstants.BOTTOM);
        btnModificar.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                btnModificarActionPerformed(evt);
            }
        });
        jPanel2.add(btnModificar);

        btEliminar.setIcon(new javax.swing.ImageIcon(getClass().getResource("/com/camachosanchez/recursos/24_delete.png"))); // NOI18N
        btEliminar.setToolTipText("Eliminar");
        btEliminar.setBorder(javax.swing.BorderFactory.createLineBorder(new java.awt.Color(0, 0, 0)));
        btEliminar.setFocusable(false);
        btEliminar.setHorizontalTextPosition(javax.swing.SwingConstants.RIGHT);
        btEliminar.setMaximumSize(new java.awt.Dimension(22, 22));
        btEliminar.setMinimumSize(new java.awt.Dimension(22, 22));
        btEliminar.setPreferredSize(new java.awt.Dimension(22, 22));
        btEliminar.setVerticalTextPosition(javax.swing.SwingConstants.BOTTOM);
        btEliminar.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                btEliminarActionPerformed(evt);
            }
        });
        jPanel2.add(btEliminar);

        jToolBar1.add(jPanel2);

        getContentPane().add(jToolBar1, java.awt.BorderLayout.PAGE_START);

        pack();
    }// </editor-fold>//GEN-END:initComponents

    private void tablaTalleresMouseClicked(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_tablaTalleresMouseClicked
        // TODO add your handling code here:
//        if (evt.getClickCount() == 2) {
//            int fila = jTableTalleres.rowAtPoint(evt.getPoint());
//            int id = modelo.obtenerId(fila);
//            TalleresJpaController dao_taller = new TalleresJpaController(null);
//            EditorTaller editor = new EditorTaller(this, Principal.getInstance(), true, dao_taller.findTalleres(id), fila);
//            editor.setEstado(EstadoJDialog.MODIFICAR);
//            editor.setVisible(true);
//        }
    }//GEN-LAST:event_tablaTalleresMouseClicked

    private void btnNuevoActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_btnNuevoActionPerformed
        // TODO add your handling code here:
        EditorTaller registro = new EditorTaller(this, Principal.getInstance(), true, null, 0);
        registro.setEstado(EstadoJDialog.NUEVO);
        registro.setVisible(true);
    }//GEN-LAST:event_btnNuevoActionPerformed

    private void btnModificarActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_btnModificarActionPerformed
        // TODO add your handling code here:
        int fila = tablaTalleres.getSelectedRow();
        if (fila > -1) {
            int id = Integer.parseInt(tablaTalleres.getValueAt(fila, 1).toString());
            TalleresJpaController dao_taller = new TalleresJpaController(null);
            EditorTaller editor = new EditorTaller(this, Principal.getInstance(), true, dao_taller.findTalleres(id), fila);
            editor.setEstado(EstadoJDialog.MODIFICAR);
            editor.setVisible(true);
        } else {
            JOptionPane.showMessageDialog(this, "Debe seleccionar un taller.", "Advertencia", JOptionPane.WARNING_MESSAGE);
        }

    }//GEN-LAST:event_btnModificarActionPerformed

    private void btEliminarActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_btEliminarActionPerformed
        // TODO add your handling code here:
        int fila = tablaTalleres.getSelectedRow();
        if (fila > -1) {
            if (JOptionPane.showConfirmDialog(null, "¿Está seguro que desea eliminar el taller seleccionado?", "Confirmación", JOptionPane.YES_NO_OPTION) == JOptionPane.YES_OPTION) {
                int id = Integer.parseInt(tablaTalleres.getValueAt(fila, 1).toString());
                TalleresJdbcControler daoJdbc = new TalleresJdbcControler();
                byte estado = daoJdbc.eliminarTaller(id);
                if (estado == 1) {
                    JOptionPane.showMessageDialog(this, "El taller se encuentra relacionado con otros registros, no puede ser eliminado.", "Error en la eliminación", JOptionPane.ERROR_MESSAGE);
                } else {
                    JOptionPane.showMessageDialog(this, "El taller se ha eliminado de forma segura.", "Operación finalizada", JOptionPane.INFORMATION_MESSAGE);
                    this.borrarTaller(fila);
                }
            }
        } else {
            JOptionPane.showMessageDialog(this, "Debe seleccionar un taller.", "Advertencia", JOptionPane.WARNING_MESSAGE);
        }
    }//GEN-LAST:event_btEliminarActionPerformed

//    public void actualizarFila(Talleres taller, int fila) {
//        modelo.actualizarTaller(taller, fila);
//        jTableTalleres.updateUI();
//    }
//    public void agregarFila(Talleres taller) {
//        modelo.agregarTaller(taller);
//        jTableTalleres.updateUI();
//    }
    public void borrarTaller(int fila) {
        modelo.borrarAccion(fila);
    }
    // Variables declaration - do not modify//GEN-BEGIN:variables
    private javax.swing.JButton btEliminar;
    private javax.swing.JButton btnModificar;
    private javax.swing.JButton btnNuevo;
    private javax.swing.JPanel jPanel1;
    private javax.swing.JPanel jPanel2;
    private javax.swing.JScrollPane jScrollPane1;
    private javax.swing.JToolBar jToolBar1;
    private javax.swing.JTable tablaTalleres;
    // End of variables declaration//GEN-END:variables
}
